AI Post Traning: DanceGRPO

导言

DanceGRPO是25年5月发表的论文,把GRPO的方法引入到了生成领域。(类似的有flowGRPO)。字节客户基于此魔改,故学习。

背景知识:

Diffusion Model

去噪(Denoising)的本质不是“修改”,而是“根据模糊的线索,重新生成一个全新的清晰样本”。

第一步:前向加噪

(理解数据是怎么毁掉的)

$$ z_t = \alpha_t x + \sigma_t \epsilon $$

  • **$z_t$**:时间 $t$ 时刻的图片(它既不是纯图,也不是纯噪,是两者的混合体)。
  • **$x$**:原始的清晰图片(比如一只猫)。
  • **$\epsilon$**:纯随机噪声(电视屏幕的雪花点)。
  • **$\alpha_t, \sigma_t$**:两个控制比例的阀门。

直观理解:

这就像是在调鸡尾酒:

  • 杯子里原本有 80% 的猫($x$)20% 的雪花噪点($\epsilon$)
  • 随着时间 $t$ 增加,$\alpha_t$ 变小(猫的味道变淡),$\sigma_t$ 变大(油漆味变浓)。
  • 到最后($t=1$),杯子里 0% 是猫,100% 是油漆

第二步:反向去噪

(AI 怎么把猫变回来)公式 (2) 看起来很奇怪,它其实分两步走:

目的:我们要算出 $z_{s}$(一个比 $z_t$ 更清晰一点的图片)。

过程

  1. AI 的工作(预测噪声)
    模型 $\epsilon_\theta$ 看着满是油漆的图片 $z_t$,猜这里面有多少是噪声。
    它猜的结果叫 $\hat{\epsilon}$。
  2. 人类的工作(重新配比)
    我们拿到 AI 猜的噪声 $\hat{\epsilon}$,然后利用公式 (2) 强行配出一杯新酒:
    $$ z_s = \alpha_s \mathbf{\hat{x}} + \sigma_s \mathbf{\hat{\epsilon}} $$

关键点解析

  • $\hat{x}$(x-hat):这是根据公式 (1) 倒推出来的“假原图”。
    • 既然 $z_t = \alpha_t x + \sigma_t \epsilon$,
    • 那么 $x$ 应该等于 $(z_t - \sigma_t \epsilon) / \alpha_t$。
    • 但是我们不知道真实的 $\epsilon$,所以我们用 AI 猜的 $\hat{\epsilon}$ 来代替。
  • $\hat{\epsilon}$(epsilon-hat):这是 AI 预测的噪声。

所以,整个过程是:

  1. 拆解:AI 看着模糊图 $z_t$,说:“我觉得这里面大概有 80% 是噪声,20% 是图。”(它输出了 $\hat{\epsilon}$)。
  2. 重组:我们根据 AI 的判断,把噪声去掉,然后利用公式 (2) 重新混合一个清晰度高一点的图 $z_s$。

3. 乘以 $\sigma_s$ 和 $\alpha_s$

为什么公式里还要乘以 $\sigma_s$ 和 $\alpha_s$?
这其实是在模拟“时间的流逝”

  • 假设 $s$ 是第 99 步(非常接近原始图片了)。
    • 这时候 $\alpha_s$ 接近 1(全是图),$\sigma_s$ 接近 0(几乎没有噪)。
    • 公式变成:$z_s \approx 1 \times \text{AI猜的图} + 0 \times \text{AI猜的噪}$。
    • 结果:输出就是 AI 猜的图,非常清晰。
  • 假设 $s$ 是第 1 步(刚开始生成)。
    • 这时候 $\alpha_s$ 接近 0,$\sigma_s$ 接近 1。
    • 公式变成:$z_s \approx 0 \times \text{AI猜的图} + 1 \times \text{AI猜的噪}$。
    • 结果:输出就是一堆随机噪声(从 $z_1$ 开始)。

4. 去噪过程

如果你要画一张图来解释这个过程,请按以下步骤:

  1. 起点:手里拿着一个全是噪点的球($z_1$)。
  2. 循环 50 次
    • 看一眼:把球给 AI 看,问:“这里面大概是什么图案的噪声?”(模型输出 $\hat{\epsilon}$)。
    • 捏造型:根据 AI 的回答,你手里的泥巴(参数)开始变形。
      • 你不是在“擦除”噪点,你是在根据 AI 的描述,重新捏一个新球
      • 捏的时候,你遵循公式 (2) 的比例:刚开始捏的时候,主要听噪声的(因为 $\sigma$ 大);越往后捏,越听 AI 描述的图案(因为 $\alpha$ 大)。
    • 更新:把手里的球换成新捏的球($z_s$)。
  3. 终点:最后一步,$\sigma$ 变成了 0,你完全不听噪声了,只听 AI 描述的图案。于是你手里出现了一只完美的猫。

一句话总结:
去噪过程就是利用 AI 对噪声的预测 ($\hat{\epsilon}$),通过公式 (2) 不断重新混合样本,逐渐把“全是噪点的液体”变成“全是数据的固体”的过程。

修正流(Rectified Flow)

1. 前向过程(Forward Process)

在修正流中,前向过程被视为数据($x$)噪声($\epsilon$)之间的线性插值。

$$ z_t = (1 - t)x + t\epsilon \tag{3} $$

  • **$z_t$**:时刻 $t$ 的状态(混合了数据和噪声的中间态)。
  • **$x$**:原始清晰数据。
  • **$\epsilon$**:高斯噪声(Gaussian noise),作为生成过程的起点。
  • **$t$**:时间步,取值范围通常为 。
    • 当 $t=0$ 时,$z_0 = x$(纯数据)。
    • 当 $t=1$ 时,$z_1 = \epsilon$(纯噪声)。

2. 速度场定义(Velocity)

定义 $u = \epsilon - x$ 为“速度”或“向量场”。

  • 通俗理解:这代表了数据点需要以多大的“速度”和方向移动,才能从当前位置变形为噪声(或反之)。

3. 采样/去噪过程(Reverse/Sampling)

类似于扩散模型,给定去噪模型在时间步 $t$ 的输出预测值 **$\hat{u}$**,我们可以计算更低噪声水平 $s$(即 $s < t$)的状态:

$$ z_s = z_t + \hat{u} \cdot (s - t) \tag{4} $$

  • **$\hat{u}$**:模型预测的“速度”。
  • **$(s - t)$**:时间差(负值,因为 $s < t$)。
  • 逻辑:根据预测的速度,回溯到前一个时间步的状态。这相当于在向量场中进行了一次“反向跳跃”。

这段文字揭示了扩散模型(Diffusion Models)和修正流模型(Rectified Flow Models)在数学形式上的统一性。虽然原文中提到的公式(5)没有直接显示,但根据文字描述,核心在于两者都可以归纳为一种线性的预测形式。

以下是针对该段落的易懂且干练的翻译:

扩散模型与修正流的统一性

虽然扩散模型和修正流拥有不同的理论基础,但在实践中,它们本质上是同一事物的两面(一体两面),其通用公式如下:

$$ \tilde{z}_s = \tilde{z}_t + \text{Network output} \cdot (\eta_s - \eta_t) $$

具体的映射关系如下表所示:

模型类型 隐变量变换 ($\tilde{z}$) 时间尺度 ($\eta$) 备注
扩散模型 ($\epsilon$-prediction) $\tilde{z} = z / \alpha$ $\eta = \sigma / \alpha$ 基于公式 (2) 推导
修正流 (Rectified Flows) $\tilde{z} = z$ $\eta = t$ 基于公式 (4) 推导

💡 核心解读::无论你是用扩散模型还是修正流,其实都是在计算“当前状态 + 网络预测值 × 时间变化量”。两者的区别仅在于是否对数据进行了缩放处理(即是否除以 $\alpha$ 系数)。

设计

将去噪视为马尔可夫决策过程 (MDP)

本文参考 DDPO ,将扩散模型和修正流的去噪过程形式化为一个强化学习的 MDP 问题:

1. 核心要素定义

  • **状态 ($s_t$)**:当前的环境状态,包含三部分信息:
    • c:输入的提示词(Prompt)。
    • t:当前的时间步(代表噪声水平)。
    • $z_t$:当前带噪声的隐变量(Latent)。
  • 动作 ($a_t$):智能体采取的动作,即生成下一个时间步的去噪结果 ($z_{t-1}$)。
  • 奖励 ($R$):仅在去噪结束时($t=0$,即得到最终清晰图像 $z_0$ 时)根据提示词 $c$ 计算奖励;过程中无奖励。

2. 数学公式详解

$$ s_t \triangleq (\mathbf{c}, t, z_t) \tag{State} $$

  • 状态由提示词 c、当前步数 t 和当前噪声数据 $z_t$ 组成。

$$ \pi(a_t | s_t) \triangleq p(z_{t-1} | z_t, c) \tag{Policy} $$

  • 策略:在给定当前状态(当前噪声 $z_t$ + 提示词 c)下,模型预测下一个状态(去噪一步 $z_{t-1}$)的概率。

$$ a_t \triangleq z_{t-1} \tag{Action} $$

  • 动作:直接等于去噪后的结果 $z_{t-1}$。

$$ R(s_t, a_t) \triangleq \begin{cases} r(z_0, c), & \text{if } t = 0 \ 0, & \text{otherwise} \end{cases} \tag{Reward} $$

  • 奖励函数
    • 如果是最后一步($t=0$),奖励等于奖励模型 $r$ 的打分(基于生成的图像 $z_0$ 和提示词 c)。
    • 如果是中间步骤,奖励为 0。

$$ \rho_0(s_0) \triangleq (p(c), \delta_T, \mathcal{N}(0, I)) \tag{Initial} $$

  • 初始状态分布
    • 提示词来自分布 $p(c)$。
    • 初始步数为 $T$(最大噪声步数)。
    • 初始隐变量 $z_T$ 是纯高斯噪声 $\mathcal{N}(0, I)$。

通俗理解

这段话的意思是:把生成图片的过程当成玩一个“猜图”游戏。

  1. **状态 (State)**:你现在的手里的草稿($z_t$)、题目要求($c$)和当前是第几步($t$)。
  2. **动作 (Action)**:你擦掉一部分噪点,画出一个新草稿($z_{t-1}$)。
  3. 奖励 (Reward)在整个游戏结束前,你都看不到分数。只有当你画出最终结果($t=0$)并交给裁判(Reward Model,如 CLIP)看时,才会根据“画得像不像题目”给出最终分数。

公式

将生成模型的采样过程改写为随机微分方程(SDE),以便适配强化学习算法(GRPO)的需求。

🎯 采样 SDE 的公式化 (Formulation of Sampling SDEs)

为了适配 GRPO 算法对随机探索(Stochastic Exploration)的需求(即策略更新依赖于轨迹的概率分布),我们将扩散模型和修正流的采样过程统一改写为 SDE 形式。

1. 扩散模型 (Diffusion Models)

前向

  • 形式:这是一个 SDE(随机微分方程)
  • 公式:$dz_t = f_t z_t dt + g_t dw$
  • 含义:它天生带有随机性($dw$ 代表布朗运动/噪声)。这是为了模拟数据逐渐变成噪声的过程。

反向去噪(Reverse Process - ODE)

  • 逻辑:通常情况下,生成模型(如扩散模型或修正流)在生成图片时,往往追求确定性(Deterministic)。
  • 形式:通常被写成 ODE(常微分方程)
  • 特点:给定一个输入,永远得到同一个输出(像按固定轨道运行的卫星)。

反向 SDE(Reverse SDE)

改写表达式如下:

$$ \mathrm{d} \mathbf{z}{t} = \left( f{t} \mathbf{z}{t} - \frac{1 + \varepsilon{t}^{2}}{2} g_{t}^{2} \nabla \log p_{t} ( \mathbf{z_{t}} ) \right) \mathrm{d} t + \varepsilon_{t} g_{t} \mathrm{d} \mathbf{w} \tag{7} $$

公式中各符号的直观含义

  • **$dz_t$**:下一步状态的变化量。
  • $(f_t z_t … ) dt$“确定性部分”。这部分是基于模型预测的方向(比如去噪的方向),是主要的移动趋势。
  • $- \frac{1 + \varepsilon_{t}^{2}}{2} g_{t}^{2} \nabla \log p_{t} ( z_{t} )$“修正项”。这是为了让生成的分布符合真实数据分布而做的数学修正(Score-based 项)。
  • $\varepsilon_t g_t dw$“随机性部分”(关键点)。
    • $\varepsilon_t$:控制随机程度的系数。
    • $dw$:随机噪声(来自布朗运动)。
    • 作用:这就是为了让 AI 在画图时能“随机发挥”,从而满足强化学习需要试错的需求。

2. 修正流 (Rectified Flows)

修正流的前向过程通常是确定性的 ODE($dz_t = u_t dt$),但这无法满足 GRPO 所需的随机性。受启发,我们在其反向过程中引入 SDE:

$$ \mathrm{d} \mathbf{z}{t} = \left( \mathbf{u}{t} - \frac{1}{2} \varepsilon_{t}^{2} \nabla \log p_{t} ( \mathbf{z}{t} ) \right) \mathrm{d} t + \varepsilon{t} \mathrm{d} \mathbf{w} \tag{8} $$

3. 核心变量说明

  • $\varepsilon_t$ (Epsilon):引入采样过程中的随机性(Stochasticity),这是连接确定性模型与强化学习探索需求的关键桥梁。
  • **$\nabla \log p_t(z_t)$**:得分函数(Score Function)。若给定正态分布 $p_t(z_t) = N(z_t | \alpha_t x, \sigma_t^2 I)$,则有 $\nabla \log p_{t} ( \mathbf{z}{t} ) = -(\mathbf{z}{t} - \alpha_{t} \mathbf{x}) / \sigma_{t}^{2}$。
  • **$dw$**:布朗运动(Brownian motion),代表随机噪声。

通过将上述公式代入,我们可以推导出策略概率 $\pi(a_t | s_t)$。

DanceGRPO 目标函数

🎯 DanceGRPO 优化目标 (Objective Function)

受 DeepSeek-R1 启发,该算法通过最大化以下目标函数来更新策略模型($\pi_\theta$):

$$ J(\theta) = \mathbb{E} \left[ \frac{1}{G} \sum_{i=1}^{G} \frac{1}{T} \sum_{t=1}^{T} \min \left( \rho_{t,i} A_i, \text{clip}(\rho_{t,i}, 1-\epsilon, 1+\epsilon) A_i \right) \right] $$

1. 核心逻辑:PPO 风格的剪切目标 (Clipped Surrogate Objective)

给定一个提示词 $c$,模型生成一组样本(Group of outputs),通过比较新旧策略的差异来更新模型,防止更新幅度过大。

  • $\rho_{t,i}$ (概率比率 Probability Ratio):
    $$ \rho_{t,i} = \frac{\pi_\theta(a_{t,i}|s_{t,i})}{\pi_{\theta_{old}}(a_{t,i}|s_{t,i})} $$
    • 衡量新策略 $\pi_\theta$ 与旧策略 $\pi_{\theta_{old}}$ 在状态 $s$ 下采取动作 $a$ 的概率差异。
  • $\epsilon$ (超参数): 一个很小的数(如 0.2),用于限制更新的步长,确保训练稳定。
  • $\text{clip}(\cdot)$: 剪切函数,将比率限制在 $[1-\epsilon, 1+\epsilon]$ 范围内。

2. 优势函数 (Advantage Function) $A_i$

用于衡量第 $i$ 个样本在组内的表现优劣,通过组内标准化计算:

$$ A_i = \frac{r_i - \text{mean}({r_1, …, r_G})}{\text{std}({r_1, …, r_G})} $$

  • $r_i$: 第 $i$ 个样本获得的奖励分数。
  • 逻辑: 如果样本的奖励高于组内平均水平($r_i > \text{mean}$),则 $A_i$ 为正,模型会增加该样本生成的概率;反之则降低。

💡 通俗总结

这段公式的意思是:

  1. 分组打分:给一个题目(Prompt),让模型做 $G$ 道题(生成 $G$ 个样本)。
  2. 相对评价:算出每道题的分数后,看谁比平均分高,谁比平均分低。
  3. 安全改进:表扬那些分数高于平均的样本(增加生成概率),批评低于平均的样本(减少概率),但表扬和批评的幅度不能太激进(由 $\epsilon$ 控制),以免把模型改“坏”了。

没有kl loss

虽然传统的GRPO公式使用kl正则化来防止奖励过度优化,但我们从经验上观察到,当忽略这一组件时,性能差异最小。因此,我们在默认情况下省略了KLregularization项。

开CFG会不稳定

背景
CFG 是条件生成建模中生成高质量样本的常用技术。

存在问题
在当前的训练设置中,将 CFG 集成到训练流水线(Training pipelines)中会导致优化过程不稳定

解决方案
基于实证研究,建议对高保真度模型(如 HunyuanVideo 和 FLUX)在采样阶段禁用 CFG

  • 目的:减少梯度震荡(Gradient oscillation)。
  • 效果:在保持输出质量的同时,确保训练稳定性。

这是一段关于 CFG(无分类器引导)模型训练不稳定性 的技术分析。为了让你更直观地理解,我将其翻译并整理为结构清晰的 Markdown 格式。

针对依赖 CFG 来保证生成质量的模型(如 SkyReels-I2V 和 Stable Diffusion),我们发现了一个关键问题及应对策略:

  1. 核心问题:优化轨迹发散
  • 现象:如果仅针对“条件输出”(Conditional Objective)进行训练,会导致优化过程失控(发散)。
  • 原因:必须同时对“条件输出”和“无条件输出”(Unconditional outputs)进行联合优化。
  • 代价:这需要同时运行两个网络进行计算,导致 显存(VRAM)消耗直接翻倍
  1. 解决方案:降低参数更新频率
  • 策略:建议降低每个训练迭代中的参数更新频率。
  • 实证效果:经验证,将每次迭代的更新次数限制为 1 次,能显著提升 SkyReels-I2V 模型的训练稳定性。
  • 副作用:对模型的收敛速度影响极小。

优化Trick

时间步选择 (Ablation on Timestep Selection)

实验目的
探究不同时间步(Timestep)选择策略对 HunyuanVideo-T2I 模型训练效果的影响。

五种实验条件

  1. **仅前 30%**:仅使用从噪声开始的前 30% 时间步进行训练。
  2. **随机 30%**:随机采样 30% 的时间步进行训练。
  3. **仅后 40%**:仅使用输出前的最后 40% 时间步进行训练。
  4. **随机 60%**:随机采样 60% 的时间步进行训练。
  5. **全量 100%**:使用所有时间步进行训练(基准)。

核心发现

  • 初期步数至关重要:前 30% 的时间步对学习基础生成模式(Foundational generative patterns)至关重要,对模型性能贡献最大。
  • 单一区间有缺陷:如果训练仅局限于前 30% 的时间步,模型性能反而会下降。这是因为模型缺乏对“后期精细化动态”(Late-stage refinement)的学习。

最终策略:随机时间步丢弃 (Stochastic Timestep Dropout)
为了在计算效率模型保真度之间取得平衡,作者采用了 40% 的随机时间步丢弃策略

  • 做法:在训练过程中,随机屏蔽(Mask)40% 的时间步。
  • 优势
    • 减少了计算量(提升了效率)。
    • 保留了潜在扩散过程的时间连续性。
    • 证明了通过策略性地减少时间步采样,可以在基于流的生成框架中优化资源利用。
Author

Shaojie Tan

Posted on

2026-01-27

Updated on

2026-01-27

Licensed under